home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / WOLFSRC.ZIP / WOLFSRC.1 / DETECT.C < prev    next >
Text File  |  1993-09-23  |  2KB  |  87 lines

  1. ///////////////////////////////////////////////////////////////////////////
  2. //
  3. //    SDL_CheckSB() - Checks to see if a SoundBlaster resides at a
  4. //        particular I/O location
  5. //
  6. ///////////////////////////////////////////////////////////////////////////
  7. static boolean
  8. SDL_CheckSB(int port)
  9. {
  10.     int    i;
  11.  
  12.     sbLocation = port << 4;        // Initialize stuff for later use
  13.  
  14.     sbOut(sbReset,true);        // Reset the SoundBlaster DSP
  15. asm    mov    dx,0x388                // Wait >4usec
  16. asm    in    al, dx
  17. asm    in    al, dx
  18. asm    in    al, dx
  19. asm    in    al, dx
  20. asm    in    al, dx
  21. asm    in    al, dx
  22. asm    in    al, dx
  23. asm    in    al, dx
  24. asm    in    al, dx
  25.  
  26.     sbOut(sbReset,false);        // Turn off sb DSP reset
  27. asm    mov    dx,0x388                // Wait >100usec
  28. asm    mov    cx,100
  29. usecloop:
  30. asm    in    al,dx
  31. asm    loop usecloop
  32.  
  33.     for (i = 0;i < 100;i++)
  34.     {
  35.         if (sbIn(sbDataAvail) & 0x80)        // If data is available...
  36.         {
  37.             if (sbIn(sbReadData) == 0xaa)    // If it matches correct value
  38.                 return(true);
  39.             else
  40.             {
  41.                 sbLocation = -1;            // Otherwise not a SoundBlaster
  42.                 return(false);
  43.             }
  44.         }
  45.     }
  46.     sbLocation = -1;                        // Retry count exceeded - fail
  47.     return(false);
  48. }
  49.  
  50. ///////////////////////////////////////////////////////////////////////////
  51. //
  52. //    Checks to see if a SoundBlaster is in the system. If the port passed is
  53. //        -1, then it scans through all possible I/O locations. If the port
  54. //        passed is 0, then it uses the default (2). If the port is >0, then
  55. //        it just passes it directly to SDL_CheckSB()
  56. //
  57. ///////////////////////////////////////////////////////////////////////////
  58. static boolean
  59. SDL_DetectSoundBlaster(int port)
  60. {
  61.     int    i;
  62.  
  63.     if (port == 0)                    // If user specifies default, use 2
  64.         port = 2;
  65.     if (port == -1)
  66.     {
  67.         if (SDL_CheckSB(2))            // Check default before scanning
  68.             return(true);
  69.  
  70.         if (SDL_CheckSB(4))            // Check other SB Pro location before scan
  71.             return(true);
  72.  
  73.         for (i = 1;i <= 6;i++)        // Scan through possible SB locations
  74.         {
  75.             if ((i == 2) || (i == 4))
  76.                 continue;
  77.  
  78.             if (SDL_CheckSB(i))        // If found at this address,
  79.                 return(true);        //    return success
  80.         }
  81.         return(false);                // All addresses failed, return failure
  82.     }
  83.     else
  84.         return(SDL_CheckSB(port));    // User specified address or default
  85. }
  86.  
  87.